/*
 * RecordStore.h
 *
 *  Created on: 2018年5月17日
 *      Author: zhengboyuan
 */

#ifndef RecordStore_H_
#define RecordStore_H_

#include "BasicType.h"
#include "MStorageType.h"

namespace av
{


class RecordStore
{
public:
    virtual ~RecordStore() {}

    virtual bool open(const char* dbpath) =0;

    virtual void close() =0;

    virtual bool isOpen() =0;

    /**
     * 查找录像
     * @param records   录像数组
     * @param size      数组大小
     * @return  录像个数
     */
    virtual int findRecord(const MRecordQuery& query, int offset, MRecord* records, int size) =0;

    /**
     * 统计符合条件的记录数
     * @param query
     * @return
     */
    virtual int countRecord(const MRecordQuery& query) =0;


	virtual bool getRecord(int id, av::MRecord& record) =0;

    /**
     * 删除录像
     * @param id    record 标识
     * @return
     */
    virtual bool deleteRecord(int id) =0;


    /**
     * 通过文件名删除录像
     * @param filename
     * @return true on success
    */
    virtual bool deleteRecordWithFileName(const char* filename) = 0;


    /**
     * 根据文件名查找录像
     * return true 表示找到
    */
    virtual bool findRecordWithFileName(const char* filename, MRecord* record) = 0;

    /**
     * 清理损坏的记录.
     * 记录的文件不存在时, 被认为是损坏的.
     * 内部启用独立线程, 遍历删除. 不会阻塞该调用.
     * @param chl < 0 表示清理所有的记录
     */
    virtual void clearBrokenRecord(const char* chl) =0;

};


DLLEXPORT RecordStore* createRecordStore();

DLLEXPORT void destroyRecordStore(RecordStore* record);



}

#endif /* RecordStore_H_ */
